ColdFusion + Namazu(全文検索)を使ってみた
今回は全文検索をセットアップしてみました。
ColdFusionに付属するVerityとSolrは使わずにNamazuを使います。
セットアップした環境は以下の通りです。
プロダクト名 | バージョン | インストールディレクトリ |
---|---|---|
ColdFusion | version 9 | C:\ColdFusion9 |
Windows7 | Enterprise Edition | - |
kakasi | version 2.3.4 | C:\kakasi |
Active Perl | version 5.8.9 | C:\Perl |
Namazu | version 2.0.21 | C:\namazu |
まずは検索結果で使うnamazuのテンプレート(NMZ.result.normal.ja)を変更します。この変更は特に強制ではありませんが、自分にあったテンプレートに変更しています。
<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (スコア: ${namazu::score})</dt> <dd>${summary}</dd> <dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br></dd>
次に検索結果で使うnamazuのテンプレート(NMZ.head.ja)を変更します。<head>の下に以下の一行を追加しました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift-JIS"> ←追加した行 <!-- LINK-REV-MADE --> <title>Namazu: a Full-Text Search Engine</title> ・ ・ ・
次に検索結果で使うnamazuのテンプレート(NMZ.foot.ja)を変更します。</body>の上に一行を追加しました。
<dd><a href="../search.html">検索へ戻る</a></dd> ←追加した行 </body> </html>
今回作ったアプリケーションはOfficeファイルをアップロードし、アップロードされたファイルをPDFに変換、更にPDFからTEXTだけを抽出して、そのTEXTファイルにてNamazuのインデックスファイルを作成する。という流れのWebアプリケーションを作っていますが、その一部のNamazuの部分だけを抜き出して記事にしています。
キーワード入力用のサンプルhtml(namazu.html)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang=ja> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> </head> <body> <form action="search_document.cfm" name="form1" method="post"> 全文検索ワード<input type="text" name="keywordinput"> <input type="submit"> </form> </body> </html>
アクションページ側のサンプルcfml(search_document.cfm)IPアドレス(xxx.xxx.xxx.xxx)は適宜読み替えてください。
<html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Galleriffic | Thumbnail rollover effects and slideshow crossfades</title> <link rel="stylesheet" href="css/basic.css" type="text/css" /> </head> <body> <cfset dic ="C:\namazu\var\namazu\index\cm"> <cfset out_file = "c:\temp\sample_result.html"> <cfset opt ="-h -U -o " & #out_file#> <cfif not IsDefined("form.keywordinput")> <cflocation url="http://xxx.xxx.xxx.xxx/sample/namazu.html"> </cfif> <!--- 検索コマンド発行 ---> <cfexecute name="C:\namazu\bin\namazu.exe" arguments="#opt# #form.keywordinput# #dic#"></cfexecute> <!--- 処理が早すぎてNamazu検索結果ファイル生成前にコマンドが発行されるので、スリープを150msで設定する ---> <cfset thread = CreateObject("java", "java.lang.Thread") /> <cfset thread.sleep(150) /> <!--- 吐き出されたHTMLを加工する ---> <cffile action="read" file="#out_file#" charset="shift_jis" variable="result_contents"> <!--- Namazuで吐き出された検索結果リストのURLをhttp://に置き換える ---> <cfset trance_result = replace("#result_contents#","/C|/inetpub/wwwroot/sample/text","http://xxx.xxx.xxx.xxx/sample/upload","All")> <!--- 拡張子txtをpdfに置き換える ---> <cfset trance_result2 = replace("#trance_result#",".txt",".pdf","All")> <cffile action = "write" attributes="normal" file ="C:\inetpub\wwwroot\sample\temp\sample_result.html" output ="#trance_result2#" charset="shift_jis"> <cflocation url="http://xxx.xxx.xxx.xxx/sample/temp/sample_result.html"> </body> </html>
※mknmzrcの $MAX_FIELD_LENGTH の値を200から1024に設定変更しています。($MAX_FIELD_LENGTH = 1024;)
実行画面のスクリーンショット(キーワードを『検証』として検索)